﻿#ifndef _Display_h_
#define _Display_h_

#include <stdint.h>
#include <windows.h>
//#include <SDL_video.h>
#include <GL/gl.h>
//#include <GL/glu.h>

#include <SDL.h>



#define _in_
#define _out_
#define _in_out_

#define DISPLAY_HORIZONTAL_RESOLUTION            256        // Горизонтальное разрешение экрана ( для системы PAL )
#define DISPLAY_PPU_VERTICAL_PAL_RESOLUTION      240        // Вертикальное разрешение экрана ( для системы PAL )

//
//#define BMP_PALETTE_SIZE    1024
//#define BMP_FILE_SIGNATURE  0x4D42
//
//
//enum BmpCompressionType_t
//{
//    BMP_RGB_COMPRESSION_TYPE        = 0,
//    BMP_RLE8_COMPRESSION_TYPE        = 1,
//    BMP_RLE4_COMPRESSION_TYPE        = 2,
//    BMP_BITFIELDS_COMPRESSION_TYPE    = 3,
//    BMP_JPEG_COMPRESSION_TYPE        = 4,
//    BMP_PNG_COMPRESSION_TYPE        = 5
//};
//
//#include <pshpack2.h>         
//struct BmpFileHeader_t
//{
//    uint16_t signature;
//    uint32_t fileSize;
//    uint32_t reserved;
//    uint32_t imageOffset;
//};
//#include <poppack.h>
//
//
//#include <pshpack2.h>         
//struct BmpFileInfoHeader_t
//{
//    uint32_t bmpFileInfoHeaderSize;
//    uint32_t imageWidth;
//    uint32_t imageHeight;
//    uint16_t planesAmount;
//    uint16_t bitPerPixel;
//    uint32_t comressionType;
//    uint32_t comressedImageSize;
//    uint32_t xPixelPerMeter;
//    uint32_t yPixelPerMeter;
//    uint32_t colorAmount;
//    uint32_t colorImpotantAmount;
//};
//#include <poppack.h>

struct PixelStruct
{
    uint8_t Red;
    uint8_t Green;
    uint8_t Blue;
};

struct DisplayIn_t
{
    PixelStruct* pData;       //Указатель на буффер пикселей
    uint8_t      bitPerPixel; //Размер пикселя в битах
    uint16_t     xSize;       //Ширина выводимого изображения
    uint16_t     ySize;       //Высота выводимого изображения 
    uint16_t     frameNumber; //Порядковый номер кадра 
    char*        savePath;      //путь, по которому будут сохраняться файлы screenshot
}; 

class Display_t
{
public:
    void Init( uint16_t xSize, uint16_t ySize );
    void Run( void );
    void Present( _in_ DisplayIn_t* displayIn );                //Вывести изображение

    //void SetWindowHandler( HWND windowHandler);
    //void PresentScreenShot( _in_ DisplayIn_t* displayIn);    //Вывести изображение в файл, и сохранить файл по пути, установленному в SetScreenShotSavePath

private:

private:
    //HWND            m_TargetWindowHandler;
    GLuint          m_TexId;
    PixelStruct*    m_pFrameBuffer;
    uint16_t        m_ScreenWidth;
    uint16_t        m_ScreenHeight;
    bool            m_PresentEnable;
};


#endif